#ifndef _ASEMA_H_
#define _ASEMA_H_

#include "siirto.h"
#include "siirtolista.h"
#include <vector>

using namespace std;

enum Pieces {BLACK_PAWN, BLACK_ROOK, BLACK_KNIGHT, BLACK_BISHOP, BLACK_QUEEN, BLACK_KING, 
	WHITE_PAWN, WHITE_ROOK, WHITE_KNIGHT, WHITE_BISHOP, WHITE_QUEEN, WHITE_KING};

//-----------------------------------------------------------------------------
/// Kuvaa shakin pelitilannetta: nappuloiden sijainnin laudalla (ts. jokaisen
/// ruudun sisalto), siirtovuoron (valkea/musta), ja erikoissaantojen vaatimat
/// asiat (linnoittautuminen: onko torni tai kuningas siirtynyt aikaisemmin;
/// ohestalyonti: mika - jos mikaan - sotilas teki edellisessa siirrossa
/// kaksoisaskeleen).
//-----------------------------------------------------------------------------
class Asema
{
private:
	/// \todo MILESTONE #01
	// Sopivat tietorakenteet luokan esittelyssa mainittujen
	// asioiden esittamiseksi.
	int _asema[8][8];

	bool _mustanVuoro;

	bool _mustaVoiTornittaaPitka;
	bool _mustaVoiTornittaaLyhyt;
	bool _valkeaVoiTornittaaPitka;
	bool _valkeaVoiTornittaaLyhyt;
	bool _tempAsema;
	int _kaksoishypanneenSoltunX;
	
	void sotilaanSiirtojenKokeilu(int x, int y);
	void ratsunSiirtojenKokeilu(int x, int y);
	void torninSiirtojenKokeilu(int x, int y);
	void lahetinSiirtojenKokeilu(int x, int y);
	void kuninkaanSiirtojenKokeilu(int x, int y);

	void siirtojenKokeilu(int x, int y, int taulu[8][2], bool laskeKaikki);
	float evaluoiMobiliteetti(int xy);



	Siirtolista* _lista;

public:
	Asema();
	void teeSiirto(const Siirto &s);
	void tulostaAsema() const;
	char* Asema::nappulaTeksti(int koodi) const;
	Siirtolista* siirtogeneraattori(bool tempAsema);
	float evaluoi();
	bool tarkistaUhka(const Siirto &s);
	
	
};

#endif // _ASEMA_H_
